package com.dp1.pucp.Administracion.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Administracion.DAO.RRHHDAO;
import com.dp1.pucp.Administracion.Vista.MantMaquinariaGUI2;
import com.dp1.pucp.Administracion.Vista.MaquinariaGUI;
import com.dp1.pucp.Modelo.Clases.Maquina;
import com.dp1.pucp.Modelo.Clases.Tipomaquina;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class MantMaquinariaControlador {

    private RRHHDAO m;
    private MantMaquinariaGUI2 buscarMaquinariaView;
    private ArrayList<Maquina> lstMaquina;
    private ArrayList<Tipomaquina> lstTipoMaquina;
    private ArrayList<String> lstEstado;
    private final static int ESTADO_ACTIVO = 0;
    private final static int ESTADO_INACTIVO = 1;

    public MantMaquinariaControlador(RRHHDAO dao, MantMaquinariaGUI2 v) {
        m = dao;
        buscarMaquinariaView = v;

        this.llenarEstadoCombo();
        this.llenarComboTipoMaquina();
        buscarMaquinariaView.addBuscarListener(new listarMaquinas());
        buscarMaquinariaView.addEditarListener(new editarUsuarioListener(this));
        buscarMaquinariaView.addNuevoListener(new crearMaquinariaListener(this));
        buscarMaquinariaView.addLimpiarListener(new limpiarListener());
        buscarMaquinariaView.addMantenimientoListener(new mantenimientoListener());
        buscarMaquinariaView.addActivarListener(new activarListener());

    }

    private void llenarEstadoCombo() {
        lstEstado = m.listarEstado();
        buscarMaquinariaView.llenaComboEstado(lstEstado);
    }

    private void llenarComboTipoMaquina() {
        lstTipoMaquina = m.listarTipoMaquina();
        ArrayList<String> lista = new ArrayList<>();
        lista.add(0, "Seleccionar");
        for (int i = 0; i < lstTipoMaquina.size(); i++) {
            lista.add(lstTipoMaquina.get(i).getIdtipomaquina(), lstTipoMaquina.get(i).getNombre());
        }

        buscarMaquinariaView.llenaComboMaquina(lista);
    }

    class listarMaquinas implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            listarResultados();
        }
    }

    public void listarResultados() {
        lstMaquina = m.listarMaquinaria();
        lstMaquina = realizarFiltro(lstMaquina);
        buscarMaquinariaView.llenaGrilla(lstMaquina);
    }

    class editarUsuarioListener implements ActionListener {

        private MantMaquinariaControlador buc;

        public editarUsuarioListener(MantMaquinariaControlador buscarusr) {
            buc = buscarusr;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarMaquinariaView.getFilaSel();
            if (sel != -1) {
                MaquinariaGUI p = new MaquinariaGUI(buscarMaquinariaView.getPadre(), true);
                Maquina u = lstMaquina.get(sel);
                MaquinariaControlador c = new MaquinariaControlador(m, p, buc, u);
                LogDAO.insertarLog(MainController.usuario, "Ingresar Editar Maquinaria");
                p.setVisible(true);
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar una máquina");
            }
        }
    }

    class crearMaquinariaListener implements ActionListener {

        private MantMaquinariaControlador buc;

        public crearMaquinariaListener(MantMaquinariaControlador empleado) {
            buc = empleado;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            MaquinariaGUI p = new MaquinariaGUI(buscarMaquinariaView.getPadre(), true);
            MaquinariaControlador c = new MaquinariaControlador(m, p, buc, null);
            LogDAO.insertarLog(MainController.usuario, "Ingresar Agregar Maquinaria");
            p.setVisible(true);
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            buscarMaquinariaView.LimpiarDatos();
        }
    }

    class mantenimientoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarMaquinariaView.getFilaSel();
            if (sel != -1) {
                if (buscarMaquinariaView.solicitarConfirmacion("¿Desea dar de baja/mantenimiento a la maquinaria seleccionada?") == 0) {
                    Maquina u = lstMaquina.get(sel);
                    u.setEstado(ESTADO_INACTIVO);
                    m.guardarMaquinaria(u);
                    LogDAO.insertarLog(MainController.usuario, "Mantener Maquinaria");
                    buscarMaquinariaView.mostrarAviso("Se realizó exitosamente la baja/mantenimiento de la maquina");
//                    listarResultados(buscarMaquinariaView.getEstado());
                }
            } else {
                buscarMaquinariaView.mostrarError("Debe seleccionar una maquina");
            }
        }
    }

    class activarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarMaquinariaView.getFilaSel();
            if (sel != -1) {
                int confirmacion;
                confirmacion = buscarMaquinariaView.solicitarConfirmacion("¿Desea reactivar esta maquinaria?");
                System.out.println(confirmacion);
                if (confirmacion == 0) {
                    Maquina u = lstMaquina.get(sel);
                    u.setEstado(ESTADO_ACTIVO);
                    m.guardarMaquinaria(u);
                    LogDAO.insertarLog(MainController.usuario, "Activar Maquinaria");
                    buscarMaquinariaView.mostrarAviso("Se reactivó la maquinaria con éxito");
//                    listarResultados(buscarMaquinariaView.getEstado());
                }
            } else {
                buscarMaquinariaView.mostrarError("Debe seleccionar una máquina");
            }
        }
    }
    public ArrayList<Maquina> realizarFiltro(ArrayList<Maquina> lista) {
        ArrayList<Maquina> listMaquina = new ArrayList<>();
        ArrayList<Maquina> tempListMaquina;

        tempListMaquina = lista;
        if (buscarMaquinariaView.getEstado() != 0) {
            for (int i = 0; i < tempListMaquina.size(); i++) {
                if (tempListMaquina.get(i).getEstado() == buscarMaquinariaView.getEstado()-1) {
                    listMaquina.add(tempListMaquina.get(i));
                }
            }
        } else {
            listMaquina = tempListMaquina;
        }


        tempListMaquina = listMaquina;
        listMaquina = new ArrayList<>();

        if (buscarMaquinariaView.getTipoMaquina() != 0) {
            for (int i = 0; i < tempListMaquina.size(); i++) {
                if (tempListMaquina.get(i).getTipomaquina().getIdtipomaquina() == buscarMaquinariaView.getTipoMaquina()) {
                    listMaquina.add(tempListMaquina.get(i));
                }
            }
        } else {
            listMaquina = tempListMaquina;
        }

        return listMaquina;
    }
}
